package cn.itcast.mq;

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

/**
 * 生产者：publisher
 * 消费者：consumer
 * 队列：queue
 * 交换机：exchange：
 *          Fanout：广播模式
 *          Direct：路由模式
 *          Topic：话题模式
 * ============================================================
 * 一、HelloWorld模式：
 *
 * 生产者 --> 队列 --> 消费者
 * ============================================================
 * 二、Work模式：
 *
 *                 --> 消费者
 * 生产者 --> 队列
 *                 --> 消费者
 * ============================================================
 * 三、PublishSubscribe(发布订阅模式)：
 *
 *                           --> 消费者
 *                  --> 队列
 *                           --> 消费者
 * 生产者 --> 交换机
 *
 *                  --> 队列 --> 消费者
 *
 *  3-1.FanoutExchange:无需填写路由key,只需将交换机和队列进行绑定
 *  3-2.DirectExchange:需要指定路由key,路由key为一个或多个单词"{key1,key2}"
 *  3-3.TopicExchange:需要指定模糊匹配的路由key,如："china.#";"china.*"
 *  #代表0个或多个单词,*代表一个单词
 * ============================================================
 */
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

    /**
     * 消息转换器：需引入Jackson依赖
     * 发送端和接收端的消息转换器,需保持一致
     * @return
     */
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}
